package com.java.contact;

import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

/**
 * @author Lenl
 * @create 2021-05-27 16:44
 * 测试一些数组的基本题型 杨辉三角
 */
public class ArrayExam {
    public static void main(String[] args) {
        //region 杨辉三角
        int[][] YH=new int[10][];
        for(int i=0;i<YH.length;i++){
            YH[i]=new int[i+1];
            for (int t=0;t<YH[i].length;t++){
                if(t==0||t==YH[i].length-1){
                    YH[i][t]=1;
                }else{
                    YH[i][t]=YH[i-1][t]+YH[i-1][t-1];
                }
            }
        }
        for (int i=0;i<YH.length;i++){
            if(i>0){
                System.out.println();
            }
            for (int t=0;t<YH[i].length;t++){
                System.out.print(YH[i][t]+"\t");
            }
        }
        //endregion
        System.out.println();
        //region 长度为6的1-30为元素的int数组赋值，要求元素不重复
        int[] randomInt=new int[30];
        Random ran=new Random();
        for(int i=0;i<randomInt.length;i++){
            int ranInt;
            while(true){
                ranInt= ran.nextInt(31);
                if(ranInt==0) continue;
                else{
                    //int型数组转为list
                    List<Integer> listInt=Arrays.stream(randomInt).boxed().collect(Collectors.toList());
                   if(listInt.contains(ranInt))continue;
                   else break;
                }
            }
            randomInt[i]=ranInt;
        }
        for (int i=0;i<randomInt.length;i++){
            System.out.print(randomInt[i]+";");
        }

        //endregion
        System.out.println("********");
        // region方法二,妙啊
        int[] arr=new int[30];
        for (int i=0;i<arr.length;i++){
            arr[i]=(int)(Math.random()*30)+1;
            for (int j=0;j<i;j++){
                if(arr[i]==arr[j]){
                    i--;
                    break;
                }
            }
        }
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+";");
        }
        //endregion

        //region 回旋数

        //endregion
        System.out.println("********");
        //region 数组反转
        String[] arrstr=new String[]{"AA","BB","CC"};
        for (int i=0;i<arrstr.length/2;i++){
            String temp=arrstr[i];
            arrstr[i]=arrstr[arrstr.length-i-1];
            arrstr[arrstr.length-i-1]=temp;
        }
        for (int i=0;i<arrstr.length;i++){
            System.out.print(arrstr[i]+";");
        }
        //endregion
        System.out.println("********");
        //region 数组排序,需要能手写冒泡排序和快速排序
        int[] Arr=new int[]{1,4,-6,8,12,7,23,76,255,90,43,23,54,77,88};
        //冒泡排序
        for(int i=0;i<Arr.length-1;i++){
            for (int j=0;j<Arr.length-1-i;j++){
                if(Arr[j]>Arr[j+1]){
                    int temp=Arr[j];
                    Arr[j]=Arr[j+1];
                    Arr[j+1]=temp;
                }
            }
        }
        for(int i=0;i<Arr.length;i++){
            System.out.print(Arr[i]+";");
        }

        //快速排序

        //endregion
        System.out.println("********");
        //region Arrays工具类
        //equals判断两个数组是否相等
        int[] eq1=new int[]{1,2,3};
        int[] eq2=new int[]{1,3,2,6,8};
          //eq2=eq1;
        boolean isEquals=eq1.equals(eq2);//这个比的是地址
        boolean isEquals2=Arrays.equals(eq1,eq2);
        System.out.println(isEquals+";"+isEquals2);
        //toString输出数组信息
        System.out.println(Arrays.toString(eq1));
        //fill指定值填充到数组中
        Arrays.fill(eq1,100);//会全变成100
        System.out.println(Arrays.toString(eq1));
        //sort排序
        Arrays.sort(eq2);
        System.out.println(Arrays.toString(eq2));
        //binarySearch 二分查找
        int index=Arrays.binarySearch(eq2,6);//查不到会返回负数
        System.out.println(index);
        //endregion

    }
}
